iT邦幫忙

2023 iThome 鐵人賽

DAY 4
0
自我挑戰組

設計模式系列 第 4

Day4 - 工廠模式: 簡單工廠模式(Simple factory pattern)

  • 分享至 

  • xImage
  •  

介紹
工廠模式是將物件創建的動作封裝起來,並通過一個共用介面來指向新創建的物件。工廠模式依實作方式分三類: 簡單工廠模式(Simple factory)、工廠方法模式(Factory method)、抽象工廠模式(Abstract factory)。

簡單工程模式
透過向工廠傳入代號(如: enum、字串...等)來創建指定的物件。

C++範例:

#include <iostream>

// 怪物介面
class Monster
{
public:
    virtual void Say() const = 0;
    virtual ~Monster() {}
};

// 實作怪物介面1
class HeadcrabMonster : public Monster
{
public:
    void Say() const override
    {
        std::cout << "I am a headcrab!" << std::endl;
    }
};

// 實作怪物介面2
class ZombieMonster : public Monster
{
public:
    void Say() const override
    {
        std::cout << "I am a zombie!" << std::endl;
    }
};

// 創建怪物物件的工場
class MonsterFactory
{
public:
    // 透過傳入代號來指定創建的怪物物件,這裡代號用怪物名稱字串展示
    static Monster *CreateMonster(const std::string &strMonsterID)
    {
        if (strMonsterID == "headcrab")
            return new HeadcrabMonster();
        if (strMonsterID == "zombie")
            return new ZombieMonster();
        return nullptr;
    }
};

int main()
{
    Monster *headcrab = MonsterFactory::CreateMonster("headcrab");
    if (headcrab)
    {
        headcrab->Say();
        delete headcrab;
    }

    Monster *zombie = MonsterFactory::CreateMonster("zombie");
    if (zombie)
    {
        zombie->Say();
        delete zombie;
    }
    
    return 0;
}

Output:

I am a headcrab!
I am a zombie!

優點: 工廠封裝物件的創建,不對用戶暴露物件創建的邏輯。
缺點: 擴展性差,每當加入新類別創建都需要修改工廠類。


上一篇
Day3 - 原型模式(Prototype pattern)
下一篇
Day5 - 工廠模式: 工廠方法模式(Factory method pattern)
系列文
設計模式30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言